Skip to content

Add TTL-based cleanup for StreamInfos (30min, pruned every 5min)#52

Merged
ryanbr merged 1 commit intomasterfrom
feat/streaminfo-ttl-cleanup
Apr 7, 2026
Merged

Add TTL-based cleanup for StreamInfos (30min, pruned every 5min)#52
ryanbr merged 1 commit intomasterfrom
feat/streaminfo-ttl-cleanup

Conversation

@ryanbr
Copy link
Copy Markdown
Owner

@ryanbr ryanbr commented Apr 6, 2026

Prevents unbounded accumulation of stream session data when users hop between many channels. Entries not accessed for 30 minutes are pruned along with their StreamInfosByUrl references.

Timer-based pruning (every 5 minutes) avoids hot-path overhead. LastSeenAt updated on stream session access and m3u8 processing.

Prevents unbounded accumulation of stream session data when users hop
between many channels. Entries not accessed for 30 minutes are pruned
along with their StreamInfosByUrl references.

Timer-based pruning (every 5 minutes) avoids hot-path overhead.
LastSeenAt updated on stream session access and m3u8 processing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@ryanbr ryanbr merged commit 8a84eb5 into master Apr 7, 2026
2 checks passed
ryanbr added a commit that referenced this pull request Apr 7, 2026
pruneStreamInfos was called inside the worker blob template but never
included in the .toString() serialization list, causing ReferenceError
in the worker scope. Introduced in PR #52 (streaminfo-ttl-cleanup).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ryanbr added a commit that referenced this pull request Apr 8, 2026
Backport 7 features from vaft PRs:
- parseAttributes null check + tag prefix strip (#47)
- Object.create(null) for StreamInfos/StreamInfosByUrl (#49)
- 15s timeout on GQL fetch requests (#51)
- Stream info TTL cleanup with pruneStreamInfos (#52)
- Cache WASM worker JS (#53)
- React fallback discovery with structural + TTV-AB approaches (#56)
- revokeObjectURL hook with idempotent guard (#57, #66)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ryanbr added a commit that referenced this pull request Apr 8, 2026
Backport 7 features from vaft PRs:
- parseAttributes null check + tag prefix strip (#47)
- Object.create(null) for StreamInfos/StreamInfosByUrl (#49)
- 15s timeout on GQL fetch requests (#51)
- Stream info TTL cleanup with pruneStreamInfos (#52)
- Cache WASM worker JS (#53)
- React fallback discovery with structural + TTV-AB approaches (#56)
- revokeObjectURL hook with idempotent guard (#57, #66)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ryanbr added a commit that referenced this pull request Apr 8, 2026
Backport features from vaft PRs:
- parseAttributes null check + tag prefix strip (#47)
- Object.create(null) for StreamInfos/StreamInfosByUrl (#49)
- 15s timeout on GQL fetch requests (#51)
- Stream info TTL cleanup with pruneStreamInfos (#52)
- Cache WASM worker JS (#53)
- React fallback discovery with structural + TTV-AB approaches (#56)
- revokeObjectURL hook with idempotent guard (#57, #66)
- Version logging on load + conflict detection message
- isValidWorker rejection logging
- Worker constructor non-Twitch/intercept logging
- GQL headers captured log (deduped)
- GQL response validation (accessToken?.data?.streamPlaybackAccessToken)
- hookFetch installed log
- Use split(/\r?\n/) instead of replaceAll('\r', '').split('\n')

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant